#ifndef __HIKARI_OBJ_CREATOR__
#define __HIKARI_OBJ_CREATOR__

#include "hikari.h"

class HikariPersistHandler{
public:
	virtual HObj *read(HikariContext*context, HObj*object, FileSection*section)=0;
};

class MaterialLoadHandler:public HikariPersistHandler{
	public:
	virtual HObj*read(HikariContext*context, HObj*object, FileSection*section);
};

class TransformationLoadHandler:public HikariPersistHandler{
	public:
	virtual HObj*read(HikariContext*context, HObj*object, FileSection*section);
};

class CubeLoadHandler:public HikariPersistHandler{
	public:
	virtual HObj*read(HikariContext*context, HObj*object, FileSection*section);
};

class SphereLoadHandler:public HikariPersistHandler{
	public:
	virtual HObj*read(HikariContext*context, HObj*object, FileSection*section);
};

class CustomModelLoadHandler:public HikariPersistHandler{
	public:
	virtual HObj*read(HikariContext*context, HObj*object, FileSection*section);
};

class AnimationLoadHandler:public HikariPersistHandler{
	public:
	virtual HObj*read(HikariContext*context, HObj*object, FileSection*section);
};

class CameraLoadHandler:public HikariPersistHandler{
	public:
	virtual HObj*read(HikariContext*context, HObj*object, FileSection*section);
};

class CameraInstantiateLoadHandler:public HikariPersistHandler{
	public:
	virtual HObj*read(HikariContext*context, HObj*object, FileSection*section);
};

class ConeLightLoadHandler:public HikariPersistHandler{
	public:
	virtual HObj*read(HikariContext*context, HObj*object, FileSection*section);
};

class OmniLightLoadHandler:public HikariPersistHandler{
	public:
	virtual HObj*read(HikariContext*context, HObj*object, FileSection*section);
};

class DirectionalLightLoadHandler:public HikariPersistHandler{
	public:
	virtual HObj*read(HikariContext*context, HObj*object, FileSection*section);
};

class LightLoadHandler:public HikariPersistHandler{
	public:
	virtual HObj*read(HikariContext*context, HObj*object, FileSection*section);
};

class ScriptLoadHandler:public HikariPersistHandler{
	public:
	virtual HObj*read(HikariContext*context, HObj*object, FileSection*section);
};

class BillBoardLoadHandler:public HikariPersistHandler{
	public:
	virtual HObj*read(HikariContext*context, HObj*object, FileSection*section);
};

class ParticleInstantiateLoadHandler:public HikariPersistHandler{
	public:
	virtual HObj*read(HikariContext*context, HObj*object, FileSection*section);
};

class ParticleLoadHandler:public HikariPersistHandler{
	public:
	virtual HObj*read(HikariContext*context, HObj*object, FileSection*section);
};

#endif